package model;
import roms.depot;
import vue.VueVideo;
import controleur.ControleurBouttons.ControleurTouches;
/**
 * 
 * @author Neverdie
 *
 */
public class Memory {
	/**
	 * cartouche 
	 */
	private Cartouche cartridge ;
	/**
	 * controleur des touches clavier
	 */
	private ControleurTouches touches ;
	/**
	 * la sortie output (la vue)
	 */
	private VueVideo vue ;
	/**
	 * byte H
	 */
	private byte[] highR;
	/**
	 * byte L
	 */
	private byte[] lowR;
	/**
	 * buffer de byte
	 */
	private byte[] buffer ;
	/**
	 * 
	 * @param cart cartouche
	 * @param CT controleur touches
	 * @param V vue 
	 */
	public Memory(Cartouche cart,ControleurTouches CT, VueVideo V)
	{
		setCartridge(cart);
		setTouches(CT);
		setVue(V);
		setHighR(new byte[128]);
		setLowR(new byte[32768]);
		setBuffer(new byte[128]);
	
	}
	/**
	 * mutateur pour le tableu de byte
	 * @param buffer
	 */
	public void setBuffer(byte[] buffer) {
		this.buffer = buffer;
	}
	/**
	 * accesseur pour le tableau de byte
	 * @return le buffer de byte
	 */
	public byte[] getBuffer() {
		return buffer;
	}
	/**
	 * mutateur 
	 * @param lowR tableau de byte low registre
	 */
	public void setLowR(byte[] lowR) {
		this.lowR = lowR;
	}
	/**
	 * accesseur pour le tableau low registre 
	 * @return tableau de byte lowR
	 */
	public byte[] getLowR() {
		return lowR;
	}
	/**
	 * accesseur
	 * @param highR
	 */
	public void setHighR(byte[] highR) {
		this.highR = highR;
	}
	/**
	 * mutateur
	 * @return tableau de byte registre high
	 */
	public byte[] getHighR() {
		return highR;
	}
	/**
	 * mutateur 
	 * @param cartridge
	 */
	public void setCartridge(Cartouche cartridge) {
		this.cartridge = cartridge;
	}
	/**
	 * accesseur
	 * @return la cartouche de jeu
	 */
	public Cartouche getCartridge() {
		return cartridge;
	}
	/**
	 * mutateur de controleur touches 
	 * @param touches
	 */
	public void setTouches(ControleurTouches touches) {
		this.touches = touches;
	}
	/**
	 * accesseur
	 * @return le controleur de touches
	 */
	public ControleurTouches getTouches() {
		return touches;
	}
	/**
	 * mutateur pour la vue
	 * @param vue
	 */
	public void setVue(VueVideo vue) {
		this.vue = vue;
	}
	/**
	 * accesseur
	 * @return la vue
	 */
	public VueVideo getVue() {
		return vue;
	}
	/**
	 * lecture de byte
	 * @param mapM entier 
	 * @return nouveau byte
	 */
	public byte lire(int mapM)
	{
		if(mapM < 0x8000 || mapM < 0xC000) {
			return cartridge.read(mapM);
		}
		if(mapM < 0xA000) {
			return vue.read(mapM);
		}
	return 0 ;
		
	}
	
	
	
}

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

